package com.wzy.portfolio.utils;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;

public class NumChangeUtil {
    /**
     * 数值单位转换（支持正负数）
     * @param number 需要转换的数值（非空）
     * @return 格式化后的带单位字符串（示例：-1.4亿，500.0万）
     * @throws IllegalArgumentException 如果输入为null
     */
    public static String convertToYiOrWan(BigDecimal number) {
        // 定义单位常量
        final BigDecimal YI = new BigDecimal("100000000");
        final BigDecimal WAN = new BigDecimal("10000");
        // 处理符号
        String sign = number.compareTo(BigDecimal.ZERO) < 0 ? "-" : "";
        BigDecimal absoluteNumber = number.abs();
        // 单位判断逻辑
        if (absoluteNumber.compareTo(YI) >= 0) {
            return sign + formatYi(absoluteNumber, YI);
        } else {
            return sign + formatWan(absoluteNumber, WAN);
        }
    }

    /**
     * 格式化亿单位数值（保留1位小数）
     */
    private static String formatYi(BigDecimal number, BigDecimal unit) {
        BigDecimal result = number.divide(unit, 1, RoundingMode.HALF_UP);
        return formatNumber(result) + "亿";
    }

    /**
     * 格式化万单位数值（保留1位小数）
     */
    private static String formatWan(BigDecimal number, BigDecimal unit) {
        BigDecimal result = number.divide(unit, 1, RoundingMode.HALF_UP);
        return formatNumber(result) + "万";
    }

    /**
     * 统一数值格式化（强制显示1位小数）
     */
    private static String formatNumber(BigDecimal number) {
        DecimalFormat df = new DecimalFormat("#,##0.0");
        df.setRoundingMode(RoundingMode.HALF_UP);
        return df.format(number);
    }

}
